package cn.kgc.spring03.entity;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @Author: 课工场
 * @Version: v1.0  2023/2/19
 * @Description: bean生命周期
 * 1.bean实例什么时间创建   默认情况  spring容器启动时  单例的bean    bean的作用域  原型bean 在使用时创建
 * 2.什么时间完成属性初始化   对象创建完成后  set
 * 3.什么时候执行初始化方法    属性初始化后  init()
 * 4.什么时候执行销毁方法     容器关闭时 会销毁所有单例的bean
 */
@Component
//@Scope("prototype")
public class Boo {



    private String name;

    private Integer id;

    public Boo(String name, Integer id) {
        this.name = name;
        this.id = id;
    }

    public Boo() {
        System.out.println("Boo()无参构造方法被调用");
    }

    @Value("tom")
    public void setName(String name) {
        this.name = name;
        System.out.println("setName(String name)");
    }

    @Value("1")
    public void setId(Integer id) {
        this.id = id;
        System.out.println("setId(Integer id)");
    }

    // 对象初始化方法
    @PostConstruct
    public void init(){
        System.out.println("对象的初始化方法被执行 init()");
    }


    // 对象销毁化方法
    @PreDestroy
    public void destroy(){
        System.out.println("对象的销毁方法被执行 destroy()");
    }

    @Override
    public String toString() {
        return "Boo{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
}
